home *** CD-ROM | disk | FTP | other *** search
/ Fritz: All Fritz / All Fritz.zip / All Fritz / FILES / PROGASIC / BASFILES.LZH / HMSKINPT.BAS < prev    next >
BASIC Source File  |  1988-09-10  |  7KB  |  289 lines

  1. '$INCLUDE:'QBTOOLS.INC'
  2. '' '$INCLUDE: 'qbtools2.inc'
  3.  
  4.   SUB hMaskInput (hB AS Hbuffer, Allowup%, Allowpu%, Allowdn%, Allowpd%, Allowrt%, Allowtb%, Allowes%, il%, St$, Xc%, Yc%, fc%, Bc%, UpperCaseFlag%, ExitKey%, Mask$) STATIC
  5.  
  6.         CONST MASKVALUES = "()-/\[]{}:<>.=+;,?ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz "
  7.                   
  8.         InsStatus% = 0                '  Insert flag
  9.                   
  10.         IF LEN(St$) > il% THEN        '  String is already too long
  11.             St$ = MID$(St$, 1, il%)    '  Make it the right size
  12.         END IF
  13.  
  14.         IF LEN(St$) < il% THEN        '  MUST make it equal to BLANKS
  15.             St$ = St$ + STRING$(il% - LEN(St$), 32)
  16.         END IF
  17.  
  18.         IF LEN(Mask$) <> il% THEN
  19.             ExitKey% = 0
  20.             EXIT SUB
  21.         END IF
  22.  
  23.         InChar% = 0
  24.  
  25.         FOR j% = 1 TO il%
  26.             InChar% = InChar% + ABS(INSTR(MASKVALUES, MID$(Mask$, j%, 1)) > 0)
  27.         NEXT j%
  28.  
  29.         IF InChar% = il% THEN
  30.             EXIT SUB
  31.         END IF
  32.         FOR j% = 1 TO il%
  33.             ch$ = MID$(Mask$, j%, 1)
  34.             SELECT CASE ch$
  35.                 CASE "(", ")", "-", "/", "\", "[", "]", "{", "}", ":", "<", ">", ".", "=", "+", ";", ",", "?", "A" TO "Z", "a" TO "z", " "
  36.                     MID$(St$, j%, 1) = ch$
  37.                 CASE ELSE
  38.             END SELECT
  39.         NEXT j%
  40.  
  41.         MaskBackup$ = St$
  42.  
  43.         Xoff% = 1                     '  X-co-ordinate offset
  44.         Attr% = Attributes%(fc%, Bc%, 0, 0)
  45.         ExitKey% = 0
  46.         ColorPrint St$, Yc%, Xc%, Attr%
  47.  
  48.         DO                            '  Until there's an exit
  49.  
  50.             DO
  51.                 IF INSTR(MASKVALUES, MID$(Mask$, Xoff%, 1)) THEN
  52.                     Xoff% = Xoff% + 1
  53.                 ELSE
  54.                     EXIT DO
  55.                 END IF
  56.                             
  57.                 IF Xoff% > il% THEN
  58.                     Xoff% = il%
  59.                   
  60.                     DO
  61.                         IF INSTR(MASKVALUES, MID$(Mask$, Xoff%, 1)) THEN
  62.                             Xoff% = Xoff% - 1
  63.                         ELSE
  64.                             EXIT DO
  65.                         END IF
  66.                     LOOP
  67.               
  68.                 END IF
  69.  
  70.             LOOP
  71.  
  72.             IF Xoff% > il% THEN        '  Cursor positioner too long
  73.                 Xoff% = il%
  74.             END IF
  75.  
  76.             IF Xoff% < 1 THEN
  77.                 Xoff% = 1
  78.             END IF
  79.  
  80.             ColorPrint St$, Yc%, Xc%, Attr%
  81.  
  82.             IF InsStatus% = 1 THEN        '  Insert is on
  83.                 LOCATE Yc%, Xc% + Xoff% - 1, 1, 0, 15
  84.             ELSE
  85.                 LOCATE Yc%, Xc% + Xoff% - 1, 1, 7, 7
  86.             END IF
  87.  
  88.             w$ = ""                    '  Wait until there's a character
  89.             WHILE w$ = ""
  90.                 w$ = INKEY$
  91.             WEND
  92.             LOCATE , , 0
  93.  
  94.             IF LEN(w$) = 1 THEN        '  Normal character
  95.                           
  96.                 Test$ = MID$(Mask$, Xoff%, 1)
  97.                          
  98.                 ch% = ASC(w$)
  99.                       
  100.                     IF ch% = 13 THEN
  101.                         IF Allowrt% = 1 THEN '  Yes, return is ok
  102.                             ExitKey% = 5
  103.                             EXIT DO
  104.                         END IF
  105.                     END IF
  106.  
  107.                     IF ch% = 9 THEN
  108.                         IF Allowtb% = 1 THEN '  Yes, TAB is ok
  109.                             ExitKey% = 6
  110.                             EXIT DO
  111.                         END IF
  112.                     END IF
  113.  
  114.                     IF ch% = 27 THEN
  115.                         IF Allowes% = 1 THEN '  Yes, ESC is ok
  116.                             ExitKey% = 7
  117.                             EXIT DO
  118.                         END IF
  119.                     END IF
  120.                 IF Test$ >= "0" AND Test$ <= "9" THEN
  121.                     IF w$ <= Test$ THEN
  122.                         ch% = ASC(w$)
  123.                     ELSE
  124.                         ch% = 0
  125.                     END IF
  126.                 END IF
  127.                       
  128.                 IF Test$ = "&" THEN
  129.                     IF UCASE$(w$) >= "A" AND UCASE$(w$) <= "Z" OR w$ = " " THEN
  130.                         ch% = ASC(w$)
  131.                     ELSE
  132.                         ch% = 0
  133.                     END IF
  134.                 END IF
  135.  
  136.                 SELECT CASE ch%
  137.  
  138.                     CASE 32 TO 126       '  Normal displayable char
  139.                         IF UpperCaseFlag% = 1 THEN  '  Make it upper
  140.                             w$ = UCASE$(w$)
  141.                             ch% = ASC(w$)
  142.                         END IF
  143.  
  144.                         IF UpperCaseFlag% = 2 THEN  '  Make it lower
  145.                             w$ = LCASE$(w$)
  146.                             ch% = ASC(w$)
  147.                         END IF
  148.                                   
  149.                         MID$(St$, Xoff%, 1) = CHR$(ch%)
  150.                         Xoff% = Xoff% + 1
  151.  
  152.                     CASE 8, 127          '  Back space
  153.                         IF Xoff% > 1 THEN
  154.                             Xoff% = Xoff% - 1
  155.                             IF INSTR(MASKVALUES, MID$(Mask$, Xoff%, 1)) = 0 THEN
  156.                                 MID$(St$, Xoff%, 1) = " "
  157.                             END IF
  158.                                                                  
  159.                             DO
  160.                                 IF Xoff% > 0 THEN
  161.                                     IF INSTR(MASKVALUES, MID$(Mask$, Xoff%, 1)) THEN
  162.                                         Xoff% = Xoff% - 1
  163.                                     ELSE
  164.                                         MID$(St$, Xoff%, 1) = " "
  165.                                         EXIT DO
  166.                                     END IF
  167.                                 ELSE
  168.                                     EXIT DO
  169.                                 END IF
  170.                             LOOP
  171.  
  172.                             IF Xoff% = 0 THEN
  173.                                 DO
  174.                                     Xoff% = Xoff% + 1
  175.                                     IF INSTR(MASKVALUES, MID$(Mask$, Xoff%, 1)) = 0 THEN
  176.                                         EXIT DO
  177.                                     ELSE
  178.                                         IF Xoff% = il% THEN
  179.                                             PRINT
  180.                                             PRINT "Illegal Mask"
  181.                                             PRINT
  182.                                             END
  183.                                         END IF
  184.                                     END IF
  185.                                 LOOP
  186.                             END IF
  187.                         END IF
  188.  
  189.  
  190.                         CASE ELSE
  191.                     END SELECT
  192.  
  193.                     ELSE
  194.                         ch% = ASC(MID$(w$, 2))  '  Extended character
  195.                         SELECT CASE ch%
  196.  
  197.                             CASE 59, 84, 94, 104 '  Function Key One
  198.                                 hFrameHandler hB  '  Call the Help Handler
  199.  
  200.  
  201.                             CASE 75              '  Left arrow
  202.                               
  203.                                 IF Xoff% > 1 THEN
  204.                                     Xoff% = Xoff% - 1
  205.                                                                 
  206.                                 DO
  207.                                     IF Xoff% > 0 THEN
  208.                                         IF INSTR(MASKVALUES, MID$(Mask$, Xoff%, 1)) THEN
  209.                                             Xoff% = Xoff% - 1
  210.                                         ELSE
  211.                                             EXIT DO
  212.                                         END IF
  213.                                     ELSE
  214.                                         EXIT DO
  215.                                     END IF
  216.                                 LOOP
  217.  
  218.                                 IF Xoff% = 0 THEN
  219.                                     DO
  220.                                         Xoff% = Xoff% + 1
  221.                                         IF INSTR(MASKVALUES, MID$(Mask$, Xoff%, 1)) = 0 THEN
  222.                                             EXIT DO
  223.                                         ELSE
  224.                                             IF Xoff% = il% THEN
  225.                                                 PRINT
  226.                                                 PRINT "Illegal Mask"
  227.                                                 PRINT
  228.                                                 END
  229.                                             END IF
  230.                                         END IF
  231.                                     LOOP
  232.                                 END IF
  233.                             END IF
  234.                               
  235.  
  236.  
  237.                             CASE 77              '  Right arrow
  238.                                 Xoff% = Xoff% + 1
  239.  
  240.                             CASE 71              '  Home
  241.                                 Xoff% = 1
  242.  
  243.                             CASE 79              '  End
  244.                                 Xoff% = il%
  245.  
  246.                             CASE 82              '  Insert
  247.                                 InsStatus% = 1 - InsStatus%
  248.  
  249.                             CASE 83              '  Delete
  250.                                 IF INSTR(MASKVALUES, MID$(Mask$, Xoff%, 1)) = 0 THEN
  251.                                     MID$(St$, Xoff%, 1) = " "
  252.                                 END IF
  253.  
  254.                             CASE 72              '  Up arrow
  255.                                 IF Allowup% = 1 THEN '  Yes, UP is ok
  256.                                     ExitKey% = 1
  257.                                     EXIT DO
  258.                                 END IF
  259.  
  260.                             CASE 73              '  Page up
  261.                                 IF Allowpu% = 1 THEN '  Yes, PAGE UP is ok
  262.                                     ExitKey% = 2
  263.                                     EXIT DO
  264.                                 END IF
  265.  
  266.                             CASE 81              '  Page down
  267.                                 IF Allowpd% = 1 THEN '  Yes, PAGE DOWN is ok
  268.                                     ExitKey% = 4
  269.                                     EXIT DO
  270.                                 END IF
  271.  
  272.                             CASE 80              '  Down arrow
  273.                                 IF Allowdn% = 1 THEN '  Yes, DOWN is ok
  274.                                     ExitKey% = 3
  275.                                     EXIT DO
  276.                                 END IF
  277.  
  278.                             CASE 32              '  ALT+D (Delete)
  279.                                 St$ = MaskBackup$
  280.                                 Xoff% = 1
  281.  
  282.                             CASE ELSE
  283.                         END SELECT
  284.                     END IF
  285.                 LOOP WHILE ExitKey% = 0
  286.  
  287.             END SUB
  288.  
  289.